package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.DTO.property.PropertyFloorMappingTrimDTO;
import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.common.CloudEntranceVO;
import com.itlong.cloud.POJO.VO.property.*;
import com.itlong.cloud.POJO.VO.sdk.SDKFaceDeviceInfoGetVO;
import com.itlong.cloud.POJO.VO.smartcard.GetAllDeviceVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by itlong on 2017/8/3.
 */
@Mapper
@Repository
public interface IPropertyEquipDao extends IAbstractBaseDao<EquipPO> {
    Integer save(Map<String, Object> params);
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      获取电梯楼层对应表
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/27
     */
    List<PropertyGetFloorByDeviceUniqueVO> getFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据项目id获取云电梯列表
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/03/27
     */
    List<PropertyGetElevatorNameAndDeviceUniqueVO> getElevatorByProjectId(@Param("projectId") String projectId,@Param("unitIds")String[] unitIds,@Param("floorNum")String floorNum);

    /**
     * <desc>
     *      获取设备的sn
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/11/27
     */
    String getElevatorSnByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取楼栋的地上及地下楼层
     * </desc>
     *
     * @param buildId
     * @return
     * @author Jiaqi.X
     * @createDate 2018/12/18
     */
    Map<String,Object> getBuildMaxFloorAndMinFloor(@Param("buildId") String buildId);

    /**
     * <desc>
     *      根据设备序列号获取电梯详情
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/12/27
     */
    DeviceElevatorInfoPO getElevatorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取最大权限标识及最小权限标识
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2018/12/18
     */
    Map<String,Object> getMaxNaturalAndMinNatural(String deviceUnique);

    /**
     * <desc>
     *      得到电梯的最大实际楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/26
     */
    Integer getMaxFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      得到电梯的最小实际楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/26
     */
    Integer getMinFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);


    /**
     * <desc>
     *      楼层映射表调整获取电梯楼层信息
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     */
    List<PropertyFloorMappingTrimDTO> getElevatorFloorInfos();

    /**
     * <desc>
     *      更新调整后的电梯楼层范围
     * </desc>
     *
     * @param dto
     * @return
     * @author Jiaqi.X
     */
    Integer updateFloorMappingTrim(PropertyFloorMappingTrimDTO dto);

    /**
     * <desc>
     *      更新电梯的楼层范围
     * </desc>
     *
     * @param min
     * @param max
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/28
     */
    Integer updateFloorAround(@Param("min") Integer min,@Param("max") Integer max,@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      通过Sn获取门禁设备
     * </desc>
     *
     * @param sn 门禁设备sn
     * @return 门禁设备
     * @author wangzhi
     * @createDate 2019/02/25
     */
    DeviceEntranceInfoPO getEntranceBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      云门禁校验动态开门密码
     * </desc>
     *
     * @return false-失败 true-成功
     * @author wangzhi
     * @createDate 2019/02/25
     */
    AppVisitorPassCodeRecordPO checkDynamicPwd(@Param("projectId") String projectId, @Param("dynamicPwd") String dynamicPwd, @Param("deviceId") String deviceId);

    /**
     * <desc>
     *      通过deviceUnique获取门禁设备
     * </desc>
     *
     * @param deviceUnique 门禁设备deviceUnique
     * @return 门禁设备
     * @author wangzhi
     * @createDate 2019/04/23
     */
    DeviceEntranceInfoPO getEntranceByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      查询指定电梯是否关联云群控器
     * </desc>
     *
     * @param deviceUnique 设备序列号
     * @return
     * @author Juguang.S
     * @createDate 2019/03/26
     */
    Integer isBindCloudController(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取项目配置的设置限制数量
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/08/05
     */
    Map<String,Object> getDeviceCountByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取项目的电梯设备数量
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/08/05
     */
    Integer getElevatorCount(@Param("projectId") String projectId,@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      获取项目的门禁设备数量
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/08/05
     */
    Integer getEntranceCount(@Param("projectId") String projectId,@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      获取项目的云对讲设备数量
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/08/05
     */
    Integer getCouldIntercomCount(@Param("projectId") String projectId,@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      获取项目的平板设备数量
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/08/05
     */
    Integer getPadCount(@Param("projectId") String projectId,@Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      获取访客二维码信息
     * </desc>
     *
     * @param uid
     * @param beginTime
     * @param batch
     * @param mac
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    AppVisitorPassCodeRecordPO getVisitorQrcode(@Param("projectId") String projectId,@Param("uid") String uid,@Param("beginTime") String beginTime,
                                                @Param("batch") Integer batch,@Param("mac") String mac);

    /**
     * <desc>
     *      查询房间可用次数
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    Integer getRoomUsableCount(@Param("roomId") String roomId);

    /**
     * <desc>
     *      获取房间地址信息
     * </desc>
     *
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    Map<String,Object> getAddressByRoomId(@Param("roomId") String roomId);

    /**
     * <desc>
     *      通过地址获取门禁设备
     * </desc>
     *
     * @param address
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    List<CloudEntranceVO> getEntranceListByAddress(Map<String,Object> address);

    /**
     * <desc>
     *      通过地址获取电梯设备
     * </desc>
     *
     * @param address
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    List<CloudElevatorVO> getElevatorListByAddress(Map<String,Object> address);

    /**
     * <desc>
     *      通过地址获取云对讲设备
     * </desc>
     *
     * @param address
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/15
     */
    List<DeviceCloudIntercomInfoPO> getTalkListByAddress(Map<String,Object> address);

    /**
     * <desc>
     *      获取云对讲设备信息
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/11/06
     */
    List<SDKFaceDeviceInfoGetVO> getIntercomInfoForApi(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取平板设备信息
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/11/06
     */
    List<SDKFaceDeviceInfoGetVO> getPadInfoForApi(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取电梯设备信息
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/11/06
     */
    List<SDKFaceDeviceInfoGetVO> getElevatorInfoForApi(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取门禁设备信息
     * <desc/>
     * @param   projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/11/06
     */
    List<SDKFaceDeviceInfoGetVO> getEntranceInfoForApi(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户门禁临时权限
     * </desc>
     * @param userId
     * @param projectId
     * @return
     */
    String getDoorTempAuth(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户电梯临时权限
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/25
     */
    String getElevatorTempAuth(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户云对讲临时权限
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/09/25
     */
    String getCloudTalkTempAuth(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取不同设备的批次号。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @param  deviceType 设备类型1-电梯 2-门禁 3-云对讲 4-平板
     * @return
     * @author Juguang.S
     * @createDate 2019-11-21
     */
    List<Map<String,String>> getBatchNumber(@Param("projectId") String projectId,@Param("deviceType") String deviceType);

    /**
     * <desc>
     *      获取批次号下的不同设备类型的设备数量。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @param  deviceType 设备类型1-电梯 2-门禁 3云对讲 4人脸识别仪
     * @param  batchNumber 批次号
     * @return
     * @author Juguang.S
     * @createDate 2019-11-21
     */
    Integer getDeviceCountByBatchNumber(@Param("projectId") String projectId,
                                        @Param("deviceType") String deviceType,
                                        @Param("batchNumber") String batchNumber);

    /**
     * <desc>
     *      获取项目下所有批次号下的不同设备类型的设备数量。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @param  deviceType 设备类型1-电梯 2-门禁 3云对讲 4人脸识别仪
     * @return
     * @author Juguang.S
     * @createDate 2019-12-06
     */
    Integer getDeviceCountByAllBatchNumber(@Param("projectId") String projectId,
                                        @Param("deviceType") String deviceType);

    /**
     * <desc>
     *      查询多条批次号复用的旧批次号。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @param  deviceType 设备类型1-电梯 2-门禁 3云对讲 4人脸识别仪
     * @return
     * @author Juguang.S
     * @createDate 2019-12-06
     */
    List<String> getOldBatchNumber(@Param("projectId") String projectId,
                                           @Param("deviceType") String deviceType);

    /**
     * <desc>
     *      查询多条批次号复用的旧批次号的不同类型的设备数量。
     * <desc/>
     *
     * @param  projectId 项目ID
     * @param  deviceType 设备类型1-电梯 2-门禁 3云对讲 4人脸识别仪
     * @return
     * @author Juguang.S
     * @createDate 2019-12-06
     */
    Integer getOldBatchNumberCount(@Param("projectId") String projectId,
                                   @Param("deviceType") String deviceType,
                                        @Param("oldBatchNumber") Set<String> oldBatchNumber);

    /**
     * <desc>
     *      查询项目收费模式
     * </desc>
     *
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/23
     */
    Integer searchProjectChargeModel(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取通行业主信息
     * </desc>
     *
     * @param uid
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    QrcodePassUserInfoVO findOwnerQrcodeInfo(@Param("uid") String uid,@Param("projectId") String projectId,@Param("roomNo") Integer roomNo);


    /**
     * <desc>
     *      获取通行业主信息
     * </desc>
     *
     * @param uid
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    QrcodePassUserInfoVO findOwnerQrcodeInfoByUidAndProjectId(@Param("uid") String uid,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取通行管理员信息
     * </desc>
     *
     * @param uid
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    QrcodePassUserInfoVO findManageQrcodeInfo(@Param("uid") String uid,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取通行管理员信息(物业APP新增)
     * </desc>
     *
     * @param uid
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020/01/03
     */
    QrcodePassUserInfoVO findManageQrcodeInfoByPropertyApp(@Param("uid") String uid,@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新业主房间剩余次数
     * </desc>
     *
     * @param qrcodeBatchRecordId
     * @return
     * @author Jiaqi.x
     * @createDate 2019/10/24
     */
    Integer updateQrcodeRoomCount(@Param("qrcodeBatchRecordId") String qrcodeBatchRecordId,@Param("payment") Integer payment);

    /**
     * <desc>
     *      获取访客二维码房间信息
     * </desc>
     *
     * @param uid
     * @param projectId
     * @param beginTime
     * @param mac
     * @param batch
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    QrcodePassUserInfoVO findVisitorQrcodeInfo(@Param("uid") String uid,@Param("projectId") String projectId,
                                               @Param("beginTime") String beginTime,@Param("mac") String mac,
                                               @Param("batch") Integer batch);

    /**
     * <desc>
     *      获取二维码房间信息
     * </desc>
     *
     * @param passId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    QrcodePassUserInfoVO findRoomQrcodeInfoByPassId(@Param("passId") String passId);

    /**
     * <desc>
     *      更新访客二维码使用次数
     * </desc>
     *
     *
     * @param passId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/24
     */
    Integer udpateAppVisitorUseNum(@Param("passId") String passId);

    /**
     * <desc>
     *      根据房间id及用户id获取二维码房间编号
     * </desc>
     *
     * @param roomId
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/25
     */
    Integer getRoomNoByRoomIdAndUserId(@Param("roomId") String roomId,@Param("userId") String userId);

    /**
     * <desc>
     *      获取用户在项目下最大的房间编号
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/25
     */
    Integer getMaxRoomNoByUserIdAndProjectId(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新用户房间编号
     * </desc>
     *
     * @param userId
     * @param roomId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/25
     */
    Integer updateUserRoomNo(@Param("userId") String userId,@Param("roomId") String roomId,@Param("roomNo") Integer roomNo);

    /**
     * <desc>
     *      获取SDK二维码生成记录
     * </desc>
     *
     * @param uid
     * @param batch
     * @param beginTime
     * @param mac
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/28
     */
    SdkQrcodeBatchRecord getSdkVisitorQrcodeBatchRecord(@Param("projectId") String projectId,@Param("uid") String uid,@Param("batch") Integer batch,@Param("beginTime") String beginTime,@Param("mac") String mac);

    /**
     * <desc>
     *      获取SDK二维码生成记录
     * </desc>
     *
     * @param uid
     * @return
     * @author Jiaqi.X
     * @createDate 2019/10/28
     */
    SdkQrcodeBatchRecord getSdkOwnerQrcodeBatchRecord(@Param("projectId") String projectId,@Param("uid") String uid);

    /**
     * <desc>
     *      更新业主房间剩余次数
     * </desc>
     *
     * @param type  1业主 2访客
     * @param sdkQrcodeRecordId
     * @param payment
     * @return
     * @author Jiaqi.x
     * @createDate 2019/10/24
     */
    Integer updateSDKQrcodeCount(@Param("type") Integer type,@Param("sdkQrcodeRecordId") String sdkQrcodeRecordId,@Param("payment") Integer payment);

    /**
     * <desc>
     *      检测业主通行记录是否已存在
     * </desc>
     *
     * @param userId
     * @param projectId
     * @param passTime
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/18
     */
    Integer checkOwnerRecordExists(@Param("userId") String userId,@Param("projectId") String projectId,
                                   @Param("passTime") String passTime,@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      检测访客是否存在
     * </desc>
     *
     * @param passId
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/18
     */
    Integer checkVisitorExists(@Param("passId") String passId,@Param("passTime") String passTime,@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      检测sdk二维码是否已存在
     * </desc>
     *
     * @param uid
     * @param projectId
     * @param passTime
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/18
     */
    Integer checkSDKQrcodeRecordExists(@Param("uid") String uid,@Param("projectId") String projectId,
                                       @Param("passTime") String passTime,@Param("deviceUnique") String deviceUnique,
                                       @Param("passType") Integer passType);

    /**
     * <desc>
     *      检测设备是否存在
     * </desc>
     *
     * @param deviceUnique
     * @param type
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/25
     */
    Integer checkEquipExists(@Param("deviceUnique") String deviceUnique,@Param("type") Integer type);

    /**
     * <desc>
     *      检测设备是否扣次
     * </desc>
     *
     * @param deviceUnique
     * @param type
     * @return
     * @author Jiaqi.X
     * @createDate 2019/11/25
     */
    Integer checkEquipMode(@Param("deviceUnique") String deviceUnique,@Param("type") Integer type);

    /**
     * <desc>
     *      获取所有设备
     * </desc>
     *
     * @param projectId
     * @return
     * @createDate 2019/11/25
     * @author Jiaqi.X
     */
    List<GetAllDeviceVO> getAllDevice(@Param("projectId") String projectId,@Param("type") Integer type);

    /**
     * <desc>
     *      获取iot产品编号
     * </desc>
     *
     * @param deviceType 1云电梯 2云门禁 3云对讲 4平板人脸识别 5群控器
     * @param projectId 项目编号
     * @return
     * @createDate 2019/11/25
     * @author Jiaqi.X
     */
    String getIotProductId(@Param("deviceType") Integer deviceType,@Param("projectId") String projectId);

    /**
     * <desc>
<<<<<<< HEAD
     *      获取电梯用户信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getElevatorUserInfo(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource,
                                                      @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取电梯用户信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getElevatorUserInfoCount(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource);

    /**
     * <desc>
     *      获取门禁用户信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时 6住户权限组
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getEntranceUserInfo(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource,
                                                      @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取门禁用户信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时 6住户权限组
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getEntranceUserInfoCount(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource);

    /**
     * <desc>
     *      获取云对讲用户信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getCloudTalkUserInfo(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource,
                                                       @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取云对讲用户信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param authSource 设备权限来源标识 1:一卡通 2:物业后台 3 sdk 4 App 5 物业临时
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getCloudTalkUserInfoCount(@Param("deviceUnique") String deviceUnique, @Param("authSource") List<Integer> authSource);

    /**
     * <desc>
     *      获取电梯访客信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getElevatorVisitorUserInfo(@Param("deviceUnique") String deviceUnique,
                                                      @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取电梯访客信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getElevatorVisitorUserInfoCount(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取门禁访客信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param entranceType 门禁类别 1楼栋门禁2单元门禁 3普通门禁
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getEntranceVisitorUserInfo(@Param("deviceUnique") String deviceUnique, @Param("entranceType") Integer entranceType,
                                                      @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取门禁访客信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param entranceType 门禁类别 1楼栋门禁2单元门禁 3普通门禁
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getEntranceVisitorUserInfoCount(@Param("deviceUnique") String deviceUnique, @Param("entranceType") Integer entranceType);

    /**
     * <desc>
     *      获取云对讲访客信息
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param smartType 云对讲类型，31-门口机，32-围墙机
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    List<PropertyEquipUserInfoVO> getCloudTalkVisitorUserInfo(@Param("deviceUnique") String deviceUnique, @Param("smartType") Integer smartType,
                                                       @Param("currentPage") Integer currentPage, @Param("pageSize") Integer pageSize);

    /**
     * <desc>
     *      获取云对讲访客信息数量
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @param smartType 云对讲类型，31-门口机，32-围墙机
     * @return
     * @author Qiang.S
     * @createDate 2020/06/03
     */
    Integer getCloudTalkVisitorUserInfoCount(@Param("deviceUnique") String deviceUnique, @Param("smartType") Integer smartType);

    /**
     *      清空外呼绑定关系
     * </desc>
     *
     * @param deviceUnique
     * @author Jiaqi.X
     * @createDate 2020/05/20
     */
    void deleteBluetoothCallRelation(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据真实楼层获取权限标识
     * </desc>
     *
     * @param floorNum
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/05/20
     */
    String getNaturalFloorByFloorNum(@Param("floorNum") String floorNum,@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     * 根据jd设备号获取云电梯信息
     * </desc>
     *
     * @param jdDeviceUnique
     * @return
     * @author caoshuai
     * @createDate 2020/08/03
     */
    DeviceElevatorInfoPO getElevatorByJDDeviceUnique(@Param("jdDeviceUnique") String jdDeviceUnique);

    /**
     * <desc>
     *      获取项目访客配置
     * </desc>
     *
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2020/09/23
     */
    Map<String, Object> getVisitorConfigure(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备唯一编码判断电梯是否有地址有是普通电梯
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer getElevatorInfo(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码判断特殊电梯设备信息表中是否有该电梯
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer isExistInSpecialElevator(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码删除特殊电梯设备信息表中的设备信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer deleteSpecialElevatorByDeviceUnique(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码判断门禁是否有地址是否为蓝牙门禁
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer getEntranceInfo(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码判断特殊门禁设备信息表中是否有该门禁
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer isExistInSpecialEntrance(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码删除特殊门禁设备信息表中的设备信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/15
     */
    Integer deleteSpecialEntranceByDeviceUnique(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      获取所有角色组与电梯权限
     * </desc>
     *
     * @param projectId 项目id
     * @return 角色组名称与角色组对应的电梯权限
     * @Author Zhu.yj
     * @createDate  2021/4/1
     */
    List<Map<String, String>> getGroupDevice(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据角色名称查询角色id
     * </desc>
     *
     * @param params 角色名称，项目id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/5/8
     */
    String getRoleIdByRoleName(Map<String, Object> params);

    /**
     * <desc>
     *      根据角色组id获取电梯权限
     * </desc>
     *
     * @param groupId 角色组id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/3/29
     */
    Map<String, Object> getElevatorAuthByGroupId(@Param("groupId") String groupId);

    /**
     * <desc>
     *      根据角色组id获取电梯权限
     * </desc>
     *
     * @param groupId 角色组id
     * @return
     * @Author Zhu.yj
     * @createDate  2021/3/29
     */
    List<Map<String, Object>> getElevatorAuthByGroupIds(@Param("groupId") String groupId);
}
